#include "Sorter.h"

Sorter::Sorter(void* v, size_t n, size_t t, int(*comparador)(const void*,const void*))
{
    vetor             = v;
    tamanho_vetor     = n;
    tamanho_elemento  = t;
    funcao_comparacao = comparador;
    tempo_inicial     = 0;
}

void* Sorter::get(size_t posicao)
{
    if (posicao >= tamanho_vetor) return(NULL);
    return((byte*)vetor+tamanho_elemento*posicao);
}

void Sorter::trocar(size_t primeiro, size_t segundo)
{
    if(primeiro == segundo) return;
    if(primeiro >= tamanho_vetor) return;
    if(segundo  >= tamanho_vetor) return;

    byte* a   = (byte*)get(primeiro);
    byte* b   = (byte*)get(segundo);
    byte* aux = new byte[tamanho_elemento];

    // Usar memcpy() equivale a usar:
    // for(size_t i=0 ; i<tamanho_elemento ; i++) aux[i] = a[i];

    // aux = a:
    memcpy(aux,a,tamanho_elemento);
    // a = b:
    memcpy(a,b,tamanho_elemento);
    // b = aux:
    memcpy(b,aux,tamanho_elemento);

    delete[] aux;
}

void Sorter::tempo_iniciar()
{
    tempo_inicial = clock();
}

double Sorter::tempo_terminar()
{
    return((double)((clock() - tempo_inicial)*1000)/(double)CLOCKS_PER_SEC);
}
